package cn.iocoder.yudao.module.system.service.datascopevalue;

import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;

import java.util.*;
import cn.iocoder.yudao.module.system.controller.admin.datascopevalue.vo.*;
import cn.iocoder.yudao.module.system.dal.dataobject.datascopevalue.DataScopeValueDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;

import cn.iocoder.yudao.module.system.dal.mysql.datascopevalue.DataScopeValueMapper;

import javax.annotation.Resource;

import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;

/**
 * 权限范围值 Service 实现类
 *
 * @author 芋道源码
 */
@Service
@Validated
public class DataScopeValueServiceImpl implements DataScopeValueService {

    @Resource
    private DataScopeValueMapper dataScopeValueMapper;

    @Override
    public Long createDataScopeValue(DataScopeValueSaveReqVO createReqVO) {
        // 插入
        DataScopeValueDO dataScopeValue = BeanUtils.toBean(createReqVO, DataScopeValueDO.class);
        dataScopeValueMapper.insert(dataScopeValue);
        // 返回
        return dataScopeValue.getId();
    }

    @Override
    public void updateDataScopeValue(DataScopeValueSaveReqVO updateReqVO) {
        // 校验存在
        validateDataScopeValueExists(updateReqVO.getId());
        // 更新
        DataScopeValueDO updateObj = BeanUtils.toBean(updateReqVO, DataScopeValueDO.class);
        dataScopeValueMapper.updateById(updateObj);
    }

    @Override
    public void deleteDataScopeValue(Long id) {
        // 校验存在
        validateDataScopeValueExists(id);
        // 删除
        dataScopeValueMapper.deleteById(id);
    }

    private void validateDataScopeValueExists(Long id) {
        if (dataScopeValueMapper.selectById(id) == null) {
            throw exception(DATA_SCOPE_VALUE_NOT_EXISTS);
        }
    }

    @Override
    public DataScopeValueDO getDataScopeValue(Long id) {
        return dataScopeValueMapper.selectById(id);
    }

    @Override
    public PageResult<DataScopeValueDO> getDataScopeValuePage(DataScopeValuePageReqVO pageReqVO) {
        return dataScopeValueMapper.selectPage(pageReqVO);
    }

}